// r187-div1-b
// 题意：给定[s, a]操作是将字符串s变成s+s+s...共a个。
//       又定义字符串s1 obtained from 字符串s2，意思是通过s2删除一些字符，
//       可以得到s1。现在给定字符串a, c(长度<=100)，以及数字b, d(<= 10^7)。
//       求最大的p使得[[c, d], p] obtained from [a, b]。
//
// 题意：搞清楚题意，这是个脑洞题。首先[[c, d], p] = [c, d*p]。
//       我们可以通过dp，算出对于c串每个位置开始，走过一个a串长度，
//       能够匹配多少个c串（匹配到|c|-1就算一个）以及结束停在c串哪个位置。
//       这样我们就可以O(b)模拟整个匹配过程了。
//       之前就是被b的大小吓到，非得想什么循环节。其实完全可以过。
//
// run: $exec < input
#include <iostream>
#include <string>

std::string a;
std::string c;
int b, d;

int const maxn = 108;
int matched[maxn];
int pos[maxn];

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin >> b >> d;
	std::cin >> a >> c;

	int la = a.size();
	int lc = c.size();
	for (int i = 0; i < lc; i++) {
		int k = i, count = 0;
		for (int j = 0; j < la; j++)
			if (a[j] == c[k]) {
				k++;
				if (k == lc) count++, k = 0;
			}
		matched[i] = count;
		pos[i] = k;
	}

	int ans = 0;
	for (int i = 0, j = 0; i < b; i++, j = pos[j])
		ans += matched[j];
	std::cout << ans / d << '\n';
}

